package si.yun.dao;

import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;
import si.yun.entity.*;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @program: SiYunClass
 * @description: 人事功能dao层
 * @author: 崔晓晨
 * @create: 2021-07-28 20:50
 **/
public interface PersonnelDao {
    //今日新增的用户
    int selUserToday();
    //昨日新增的用户
    int selUserYes();
    //本月新增的用户
    int selUserMou();
    //用户的总数
    int selUserNum();
    //外部申请人员（已审核的）
    int selapplyPassNum();
    //后台管理员总人数
    int selAfterUserNum();
    //待审核事务（外部申请人员）
    int selApplyWaitNum();
    //待审核事务（意见反馈）
    int selFeedBackWaitNum();
    //查询申请的总人数
    int selApplyNum();
    //查询申请的总人数
    int selApplyPass(@Param("durDate") int durDate);
    //查询未通过的人数
    int selApplyRejection(@Param("durDate") int durDate);
    //查询申请人数最多的课程
    String selApplyPosition(@Param("durDate") int durDate);
    //获取周一到周日每天的数据
    int selUserday1();
    int selUserday2();
    int selUserday3();
    int selUserday4();
    int selUserday5();
    int selUserday6();
    int selUserday7();
    //获取用户列表
    List<SyBeforeUser> selUserTable(SyBeforeUser beforeUser);
    //更改用户账号的状态
    int updBeforeStatus(@Param("userId") int userId, @Param("status") int status);
    //更改后端用户账号的状态
    int updBackStatus(@Param("userId") int userId, @Param("status") int status);
    //添加停用的用户
    int addClosure(SyClosure closure);
    //查询单个用户的详细信息
    SyBeforeUser selBackUserInfoId(@Param("userId") int userId);
    SyBeforeUserVo selBefoUserInfoId(@Param("userId") int userId);
    //查询所有的后台管理员id
    List<Integer> selBackUserIds();
    //查询所有的前台管理员id
    List<Integer> selBeforeUserIds();
    //查询单个后台用户的详细信息
    SyUser selBackUserInfo(@Param("userId") int userId);
    //编译用户信息 ( 不能编译用户的学习时长  和 交易金额 以及 账号创建时间)
    int updSelUser(SyBeforeUser beforeUser);
    //查询封号用户列表
    List<SyClosure> selClosureUserTable(SyClosure closure);
    //解封用户 改变封号列表信息
    int updClosure(SyClosure closure);
    //删除停用后的账户
    int delBeforeStatus(@Param("id") int id);
    //查询进思用户列表的详细数据
    List<PerUserListThink> selThinkUserTable(PerUserListThink userThink);
    //查看进思用户的详细信息
    PerUserListThink selUserThinkIndex(@Param("developmentId") int developmentId);
    //更改用户头像
    int updImg(@Param("developmentId") int developmentId, @Param("newName") String newName, @Param("userId") int userId);
    //更新进思用户的基本信息
    int updThinkInfo(PerUserListThink perUserListThink);
    //查询优惠券列表
    List<OperCoupons> selAwayListTab();
    //批量添加 赠送优惠券的优惠券记录
    int addUserCoupons(@Param("userId") List<Integer> userId, @Param("couponId") List<Integer> couponId);
    //查找出  发放的数量
    List<SyUserCoupon> selGaveNum();
    //批量更新发放后剩余的优惠券
    int updSurplus(List<SyUserCoupon> list);
    //添加进思用户列表
    int addThinkUserInfo(SyUserDevelopment development);
    //添加后端操作日志
    int addOperationLog(SyOperationLog log);
    //添加封号（解封）的操作日志
    int addClosureLog(SyClosureLog syClosureLog);
    //查看封号日志表
    List<PerClosureLog> selClosureLog(PerClosureLog log);
    //删除封号日志
    int delClosureLog(@Param("id") int id);
    //查看操作日志
    List<SyOperationLog> selOperationLog(SyOperationLog operationLog);
    //删除操作日志
    int delOperationLog(@Param("id") int id);
    //查询非进思用户列表
    List<SyBeforeUser> selNotThinkUser(SyBeforeUser beforeUser);
    //查看前台用户反馈列表
    List<PerFeedback> selFeedbackList(PerFeedback feedback);
    //查询待审核数量
    int selWaitNum();
    //查看已受理数量
    int selAcceptedNum();
    //更新受理状态
    int updFeedback(@Param("feedbackStatus") Integer feedbackStatus, @Param("feedbackId") Integer feedbackId);
    //查看受理详情
    PerOperationLog selReceiveInfo(@Param("tablename") String tablename, @Param("remark") String remark);
    //删除反馈信息
    int delFeedback(@Param("feedbackId") Integer feedbackId);
    //查询无消费记录用户列表
    List<SyBeforeUser> selNotSpendUser(SyBeforeUser beforeUser);
    //查询部门数据管理列表
    List<PerDept> selDeptList(PerDept dept);
    //更新部门启用 停用状态
    int updDeptStatus(@Param("deptId") Integer deptId, @Param("deptStatus") Integer deptStatus);
    //修改部门信息
    int updDeptInfo(SyDept dept);
    //添加部门
    int addDeptInfo(PerDept dept);
    //删除部门信息
    int delDeptInfo(@Param("deptId") Integer deptId);
    //获取部门信息
    List<PerDeptZtreeNode> selDeptName();
    //获取后台管理员信息
    List<PerBackUser> selBackUserList(PerBackUser user);
    //管理后台管理员账号的账户是否启用
    int updBackUserEnabled(@Param("userId") Integer userId, @Param("enabled") Integer enabled);
    //查找所有封停用户
    List<PerClosureUser> selClosureUser();
    //更改用户账号状态   封停用户账号
    int updBackUserStatus(@Param("userId") Integer userId, @Param("enabled") Integer enabled, @Param("status") Integer status);
    //更新后台管理员信息
    int updBackUserInfo(PerBackUser user);
    //更新后台管理人员头像
    int updBackUserImg(@Param("newName") String newName, @Param("userId") int userId);
    //导入后台管理员
    int importExcelUser(List<PerBackUser> list);
    //查询今日所有待解封用户
    List<SyClosure> selCloUserInfo(String endDate);
    //解封前台用户
    Integer updBeforeStatus(@Param("userId") Integer userId, @Param("status") Integer status);
    //解封后台用户
    Integer updBackStatus(@Param("userId") Integer userId, @Param("status") Integer status);
    //解封用户
    Integer updStatus(@Param("tableName") String tableName, @Param("userId") Integer userId, @Param("status") Integer status);
    //添加后台管理人员
    int addBackUserInfo(PerBackUser backUser);
    // 获取今年每月新增的用户数量（用户）
    UserMonth selBeforeNum();
    //获取今年每月新增的用户数量（管理员）
    UserMonth selBackNum();
    // 获取人员登录总次数 成功次数（前端 ，管理端）
    Integer selBeforeLoginNum();
    Integer selBackLoginNum();
    //获取某一时间段内登录的数据(前)
    Integer selTimeOne();
    Integer selTimeTwo();
    Integer selTimeThree();
    Integer selTimeFore();
    Integer selTimeFive();
    //获取某一时间段内登录的数据（管）
    Integer selTimeOnes();
    Integer selTimeTwos();
    Integer selTimeThrees();
    Integer selTimeFores();
    Integer selTimeFives();
    //查询不同的反馈类型下不同的反馈结果数据
    PerFeedData selFeedDatas(@Param("feedbackType") Integer feedbackType);
    //查询反馈的总数
    PerFeedData selFeedBackNums();
    //查询不同类型下的课程视频播放量
    List<PerCourseLook> selCourseLookNum();
    //查询审核列表数据
    List<Map<String, Object>> selAuditList(@Param("m") Map<String, Object> m);
    Map<String, Object> selBUserAuditList(@Param("user_id") Integer user_id);
    Map<String, Object> selUserAuditList(@Param("user_id") Integer user_id);
    //审核列表数据通过
    int updAuditUser1(@Param("two") Integer two, @Param("m") Map<String, Object> m);
    int updAuditUser(@Param("m") Map<String, Object> m);
    //审核列表数据删除
    int delAuditUser(@Param("THREE") Integer THREE,@Param("m") Map<String, Object> m);
    //审核列表数据查看详情
    Map<String, Object> selAuditUser(@Param("id") String id);

    //前台用户登录日志
    List<Map<String, Object>> selReceptionLoginLog(@Param("m") Map<String, Object> m);
    //删除前台用户登录日志
    int delReceptionLoginLog(@Param("id") String id);
    //后台用户登录日志
    List<Map<String, Object>> selBackstageLoginLog(@Param("m") Map<String, Object> m);
    //查询不同类型下的课程视频收藏量
    List<Map<String, Object>> selCourseCollection();
    //查询不同类型下的课程视频点赞量
    List<Map<String, Object>> selCoursePraise();
    //查询不同类型下的微圈收藏量
    List<Map<String, Object>> selMicrocircleCollection();
    //查询不同类型下的微圈点赞量
    List<Map<String, Object>> selMicroCirclePraise();
    //查询不同类型下的微圈预览量统计
    List<Map<String, Object>> selMicrocirclePreview();
    //查询不同类型下的微圈商品收藏量统计
    List<Map<String, Object>> selCommodityCollection();
    //查询不同类型下的商品点赞量统计
    List<Map<String, Object>> selProductLikes();
    //查询不同类型下的商品订单量统计
    List<Map<String, Object>> selCommodityOrder(@Param("money") double money);
    //获取所有权限
    List<Map<String, Object>> selJurisdictionList();
    //获取该用户权限
    Map<String, Object> selJurisdiction(@Param("userId") Integer userId);
    //获取该用户与改权限的角色关联
    List<Map<String, Object>> addRoleDataId(@Param("value") Integer value,@Param("userId") Integer userId);
    //获取该用户与权限的角色关联
    List<Integer> addUseprDataId(@Param("value") Integer value,@Param("userId") Integer userId);
    //为用户添加权限
    int addAuthorityData(@Param("value") Integer value,@Param("userId") Integer userId, @Param("i") Integer i);
    //用户表与角色表的关系数据
    int delRoleDataId1(@Param("role_id") Integer role_id);
    //删除叫角色表与权限表的关系数据
    int delRoleDataId2(@Param("id") Integer id);
    //删除用户与权限表的关系数据
    int delUseprDataId(@Param("s") Integer s);
    //获取客服列表数据
    List<Map<String, Object>> selSmartAI();
    Map<String,Object> selSmartAiName(@Param("id") Integer id);
    Map<String,Object> selSmartAiName1(@Param("id")Integer toId);
    //获取今天客服接待人数
    int selTodayNum();
    //获取客服昨天接待人事
    int selYesterdayNum();
    //获取客服进30天接待人数
    int selThirtyDaysNum();
    //获取客服总接待人数
    int selWholeNum();
    //删除客服聊天记录
    int delSmartAI(@Param("id") Integer id);
    //获取客服列表查看记录数据
    List<Map<String,Object>> selRecord(@Param("id") Integer id);
    //获取聊天记录
    List<Map<String,Object>> selRecordList(@Param("s") Integer s,@Param("s1") Integer s1);
    //获取今天客服接待记录
    List<Map<String, Object>> selToday(@Param("id") Integer id);
    //获取客服昨天接待记录
    List<Map<String, Object>> selYesterday(@Param("id") Integer id);
    //获取客服进30天接待记录
    List<Map<String, Object>> selThirtyDays(@Param("id") Integer id);
    //获取客服总接待记录
    List<Map<String, Object>> selWhole(@Param("id") Integer id);
    //通过id获取用户的信息
    Map<String, Object> getUserData(@Param("id") Integer from_id);
    Map<String, Object> getUserData1(@Param("id") Integer to_id);
    //查询搜索统计量
    List<SySearch> selSearchNums();


    /*
     * @Description : 根据指定时间，查询不同类型下的课程视频收藏量
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/11/30 9:57
     */
    List<Map<String, Object>> selCourseCollection2(@Param("date") String date);


    /*
     * @Description : 根据指定时间，查询不同类型下的微圈商品收藏量统计
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/11/30 10:42
     */
    List<Map<String, Object>> selCommodityCollection2(@Param("date") String date);


   /*
    * @Description : 根据指定时间，查询不同类型下的微圈收藏量
    * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
    * @Date : 2021/11/30 11:00
    */
    List<Map<String, Object>> selMicrocircleCollection2(@Param("date") String date);


    /*
     * @Description : 根据指定时间，查询不同类型下的课程视频点赞量
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/11/30 11:37
     */
    List<Map<String, Object>> selCoursePraise2(@Param("date") String date);


    /*
     * @Description : 根据指定时间，查询不同类型下的商品点赞量统计
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/11/30 11:54
     */
    List<Map<String, Object>> selProductLikes2(@Param("date") String date);

    /*
     * @Description : 根据指定时间，查询不同类型下的微圈点赞量
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/11/30 13:35
     */
    List<Map<String, Object>> selMicroCirclePraise2(@Param("date") String date);

    
    /*
     * @Description : 用户观看视频
     * @Return : int
     * @Date : 2021/12/1 9:59
     */
    int selUserVideo(@Param("userId") Integer userId);

    /*
     * @Description : 用户收藏
     * @Return : java.util.Map<java.lang.String,java.lang.Object>
     * @Date : 2021/12/1 10:22
     */
    int selUserCollection(@Param("userId") Integer userId);

    /*
     * @Description : 用户点赞
     * @Return : int
     * @Date : 2021/12/1 10:33
     */
    int selUserLike(@Param("userId") Integer userId);


    /*
     * @Description : 用户观看视频
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/12/1 14:10
     */
    List<Map<String,Object>> selUserVideo2(@Param("userId") Integer userId);

    //审核列表通过驳回返回
    int upConversotion(@Param("m")Map<String, Object> m);


    /*
     * @Description : 用户收藏课程
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/12/6 9:09
     */
    List<Map<String,Object>> selCollectionCourse(@Param("userId") Integer userId,@Param("type") Integer type);

    /*
     * @Description : 用户收藏商品
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/12/6 9:58
     */
    List<Map<String,Object>> selCollectionProduct(@Param("userId") Integer userId,@Param("type") Integer type);


    /*
     * @Description : 用户收藏微圈
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/12/6 10:24
     */
    List<Map<String,Object>> selCollectionForum(@Param("userId") Integer userId,@Param("type") Integer type);
    
    /*
     * @Description : 用户点赞课程
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/12/6 10:52
     */
    List<Map<String,Object>> selLikeCourse(@Param("userId") Integer userId,@Param("type") Integer type);
    
    
    /*
     * @Description : 用户点赞商品
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/12/6 11:06
     */
    List<Map<String,Object>> selLikeProduct(@Param("userId") Integer userId,@Param("type") Integer type);

    /*
     * @Description : 用户点赞微圈
     * @Return : java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Date : 2021/12/6 11:24
     */
    List<Map<String,Object>> selLikeForum(@Param("userId") Integer userId,@Param("type") Integer type);


    /*
     * @Description : 查询用户账号
     * @Return : java.util.List<java.lang.Integer>
     * @Date : 2021/12/17 15:46
     */
    List<Map<String,Object>> selAccount();




    /**
     *  @Decriptron 查询版本
     * @Date:2021/12/27 11:21
     * @Return:
     */
    List<Map<Object,Object>> SelVerion(@Param("versionCode") Integer versionCode,@Param("createDate") String createDate,@Param("createUser") String createUser);

    /**
     *  @Decriptron 查询详情
     * @Date:2021/12/28 20:24
     * @Return:java.util.List<java.util.Map<java.lang.Object,java.lang.Object>>
     */
    List<Map<Object,Object>> queryVersion(@Param("id")Integer id);

    /**
     *  @Decriptron 添加版本
     * @Date:2021/12/28 20:24
     * @Return:int
     */
    int AddVersion(Map<String, Object> map);





}
